package jnpf.database.datatype.limit.base;

import jnpf.database.datatype.model.DataTypeModel;
import jnpf.database.datatype.model.ViewDtModel;
import lombok.Data;

/**
 * 数据类型：长度精度限制
 * default:为可变长度时的默认值
 * fixed:不可变长度的固有值
 *
 * @author JNPF开发平台组 YanYu
 * @version V3.3
 * @copyright 引迈信息技术有限公司
 * @date 2022-05-19
 */
@Data
public abstract class DtLimitBase {

    /**
     * 数据类型 - 归属
     */
    protected String dtCategory;

    /**
     * 数据类型 - 可修改表示
     */
    protected Boolean isModifyFlag;

    /* 数据类型 - 长度限制模型 =========== */
    /**
     * 字符长度
     * 会显示类似5E+1长度的字符串,例如：4294967295，固Long类型
     */
    protected DtLimitModel charLengthLm;

    /**
     * 精度（数值整体长度）
     * >= 1
     */
    protected DtLimitModel numPrecisionLm;

    /**
     * 标度（数值小数点长度）
     * >= 0 && 标度 < 精度
     * 默认为: 0
     */
    protected DtLimitModel numScaleLm;

    /**
     * 初始化
     */
    protected void init(String dtCategory){
        this.dtCategory = dtCategory;
    }

    /**
     * 转换
     * 特殊：MySQL的varchar作为主键的长度是一个特殊值
     * @param viewDtModel 前端数据类型模型
     * @return 数据类型模型
     */
    public abstract DataTypeModel convert(ViewDtModel viewDtModel);

}
